package com.elitel.frame.base.service.impl.lx;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 public class JsonUtil<T>{

    public static <T> String ObjectToJson(T t){
        //转成json字符串
        return JSON.toJSONString(t);
    }
     public static <T> T JsonToObject(String json, Class<T> clazz){
         JSONObject jsonObject = JSON.parseObject(json);
         T javaObject = jsonObject.toJavaObject(clazz);
         return javaObject;
     }

     public static JSONObject mapToJson(Map<String, Object> map) {
         String data = JSON.toJSONString(map);
         return JSON.parseObject(data);
     }
     /**
      * map中取key对应的value
      * @param map
      * @param key
      * @return
      */
     public String mapToString(Map<String, Object> map, String key) {
         JSONObject jsonObject = mapToJson(map);
         return jsonObject.getString(key);
     }
     /**
      * map中取类对象
      * @param map
      * @param clazz
      * @param key
      * @param <T>
      * @return
      */
     public  <T> T mapToObject(Map<String, Object> map, Class<T> clazz, String key) {
         T t = null;
         JSONObject jsonObject = mapToJson(map);
         JSONObject object = jsonObject.getJSONObject(key);
         t = object.toJavaObject(clazz);
         return t;
     }


     /**
      * map中取类对象
      * @param map
      * @param clazz
      * @param <T>
      * @return
      */
     public static  <T> T mapToObj(Map<String, Object> map, Class<T> clazz) {
         if (map!=null) {
             JSONObject jsonObject = mapToJson(map);
             T javaObject = jsonObject.toJavaObject(clazz);
             return javaObject;
         }else {
             return null;
         }



     }
     /**
      * map中取list
      * @param map
      * @param clazz
      * @param key
      * @return
      */
     public  List<T> mapToList(Map<String, Object> map, Class<T> clazz, String key) {
         List<T> t = null;
         JSONObject jsonObject = mapToJson(map);
         JSONArray array = jsonObject.getJSONArray(key);
         t = array.toJavaList(clazz);
         return t;
     }




     /**
      * List<Map<Object,Object>>转换List<T>
      */
     public static  <T> List<T> castMapToBean(List<Map> findListMapBySql, Class<T> obj) {
         List<T> returnList = new ArrayList<T>();
         if (findListMapBySql == null || findListMapBySql.size()==0) {
             return returnList;
         }

         String json = "";
         for (Map<Object, Object> map : findListMapBySql) {
             json = JSONObject.toJSONString(map);

             // 添加到集合中
             returnList.add((T)JSONObject.parseObject(json, obj));
         }
         // 返回
         return returnList;
     }

     /// <summary>
     /// json对象转化为字符串
     /// </summary>
     /// <param name="obj"></param>
     /// <returns></returns>
     public static String ToJson(Object obj){
         return JSON.toJSONString(obj);
         //return JsonConvert.SerializeObject(obj);
     }
 }